// 关于 fmt  变量定义  匿名变量  常量

package main

// var g = "全局变量"

// p := "局部变量"

// func ret() (string, int) {
// 	return "test", 1234
// }

// func main() {
// fmt 主要用于打印数据
// 1. 打印数据  总的来说，Println类似于Python中的print，Printf类似于C中的printf
/*
	fmt.Println("Hello Go")    // 自动换行
	fmt.Print("Hello world\n") // 普通打印 不换行
	fmt.Printf("Hello world")  // 普通打印 不换行

	fmt.Println("A", "B", "C") // 打印多个，ln以空格分隔
	fmt.Print("A", "B", "C")   // 紧凑

	var str = "test" // 定义变量
	var a = 10
	var b = 10

	fmt.Println(str)      // Python 中的print
	fmt.Printf("%v", str) // C 中的printf
	fmt.Printf("a = %v, b = %v", a, b)
	fmt.Println("a = ", a, ", b = ", b)
*/

// 格式化就直接 %v
// 关于%#
/*
	1. %t:布尔，单词true 或 false
	2. %b:二进制表示
	3. %d:十进制表示
	4. %o:八进制表示
	5. %f:浮点数
	6. %v:相应值的默认格式，无赖，直接用。
*/

// 2. 变量定义
/*
	var num1 int = 10 // 有初值的话，类型可写可不写  初始化1

	var num2 = 10 // 初始化2

	num3 := 10 // 类型推导  初始化3
	fmt.Println(num1, num2, num3)

	var num4 int // 初始化4
	num4 = 10
	fmt.Println(num4)

	var name, pwd = "admin", 1234 // 初始化5
	fmt.Println(name, pwd)

	var ( // 初始化6
		username = "admin"
		password = 1234
	)
	fmt.Println(username, password)

	var sno, sname string // 初始化7 类型必须一致
	sno = "0001"
	sname = "张三"
	fmt.Println(sno, sname)

	var ( // 初始化8 类型可以不一样
		cno   int
		cname string
	)
	cno = 1
	cname = "Go语言"
	fmt.Println(cno, cname)

	// 9 短变量声明法，利用:=，但是只能当作局部变量
	test := "test"
	fmt.Println(test)
	fmt.Println(g)
*/

// 3. 查看变量类型  %T
/*
	fmt.Printf("%T\n", num1)
*/

// 4. 匿名变量 这里简略的写个函数，后续会学。
/*
	var retS, resI = ret()
	fmt.Println(retS, resI)
	// 通过上面这种，可以接受返回值，但是要想只接收一个
	var rets, _ = ret() // 我们必须利用_占位， 即匿名变量，否则这行代码会出错。且不占空间，不分配空间。
	fmt.Println(rets)
*/

// 5. 常量  常量在定义的时候就必须赋初值
/*
	const Name = "Tom"
	// Name = "Jack" // 常量不可以被修改
	fmt.Println(Name)
	// 常量和变量在声明方面有很大类似， 也可以一次声明多个，但是必须赋予初值。
	const (
		ca = "A"
		cA
		cb = "B"
		cB
		cBb
	)
	fmt.Println(ca, cb)
	// 这里const有一个特性，就是同时声明多个常量时，如果没有初值，则该变量和往上最近一行被定义的常量值相同。
	fmt.Println(ca, cA, cb, cB, cBb)

	// 特殊函数iota，配合const使用，单独使用，代表该常量值为0，多个使用：
	const (
		one = iota
		two // 往下依次自加1
		there
		_ //可以用_跳过一个值
		four
		idx = 100
		six = iota // 6iota支持插队，只需要续上，和_类似，会跳过一个值
	)
	fmt.Println(one, two, there, four, six)
*/
// }
